Skip to content

refactor(studio): say "fine-tunable" consistently for the model capability - #1881

Draft
aray12 wants to merge 1 commit into
mainfrom
models-naming/alray
Draft

refactor(studio): say "fine-tunable" consistently for the model capability#1881
aray12 wants to merge 1 commit into
mainfrom
models-naming/alray

Conversation

@aray12

@aray12 aray12 commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Summary

The Models page described one predicate with two words. The filter was labelled "Customizable" while its only option was labelled "Fine-tunable" — same widget, both vocabularies — and its tooltip explained it a third way. The card beside it rendered a "Fine-tunable" badge behind a prop named showCustomizationBadges.

This settles on "fine-tunable" for the user-facing model capability and collapses the underlying predicate to a single definition.

Changes

Vocabulary. "Fine-tunable" is already what the badge, the picker empty state ("No fine-tunable models found"), the form, and the tooltip say. "Customization" stays where it names the customizer service, its jobs, and their parameters — so the UI and the API now diverge deliberately rather than by accident.

One predicate, one definition. Boolean(model.fileset) was re-implemented inline in WorkspaceBaseModelsRoute and BaseModelCard, neither importing the canFineTuneModel that already existed. Both now call it.

Dead alias removed. useModelCustomizationEligibility returned canCustomize: canFineTune — a pure alias with zero production consumers, existing only to let callers pick a vocabulary. Removed, with its test.

Spellings normalised. Four spellings collapse to one:

was where
Finetuning Type CustomModelsDataView, GrpoParametersSection, CustomizationConfigSidePanel
fine-tuneable / Fine-Tuneable BaseModelCard.stories.tsx
Start Fine-Tuning NewCustomizationForm

GrpoParametersSection and TrainingMethodSection are siblings in one form and had disagreed with each other.

Mixed sentence rewritten. The custom-models empty state read "Customize a model with fine-tuning to meet your specific needs." with a "Customize Model" button.

The serialized filter id is deliberately not renamed

FINE_TUNABLE_FILTER_ID keeps its wire value 'customizable'. It is written into the filters search param, so renaming it would break links users have already bookmarked or shared. The constant is renamed and commented instead; the existing URL round-trip tests in WorkspaceBaseModelsRoute/index.test.tsx and routes/utils.test.ts still pin the wire value.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with documentation updates
  • Documentation only
  • Contributor tooling or automation
  • CI, build, or test infrastructure

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Documentation updated for user-visible behavior
  • Documentation not applicable — justification: no shipped docs quote these labels.

Note there is no i18n layer in web/ — no i18next, react-intl, or locale JSON — so every user-visible string is an inline literal and this is necessarily a cross-file string change rather than a message-catalog edit.

Base

Targets main directly. This was previously the second layer of a stacked series; it has been rebased out and stands alone. It touches no file the deployment-related PRs in stack #1909 touch, apart from WorkspaceBaseModelsRoute and CustomModelsDataView, whose overlapping hunks were separated cleanly during the rebase.

Interaction with #1892

#1892 landed on main after this branch was written and removed ModelSelectionSection's client-side canFineTuneModel call in favour of a server-side fileset: true filter. That does not conflict with this PR — it removes one of the predicate's three call sites, leaving canFineTuneModel with exactly the two consumers this PR gives it (WorkspaceBaseModelsRoute and BaseModelCard, which previously re-implemented it inline). The "one predicate, one definition" outcome still holds, and the full suite passes with #1892 present.

Verification

  • Pull request title follows the repository's Conventional Commit format
  • Every commit includes an appropriate Signed-off-by: trailer
  • uv run pre-commit run -a passes, or any blocked checks are identified below
  • Targeted tests pass, or tests are marked not applicable above
  • No secrets, API keys, or credentials are included

Targeted validation:

Re-run after rebasing onto current main:

  • pnpm --filter nemo-studio-ui test — 338 files, 3314 tests passed (full suite, to catch string assertions anywhere)
  • pnpm --filter @nemo/common test — 124 files, 1549 tests passed
  • pnpm --filter nemo-studio-ui lint — clean
  • pnpm --filter nemo-studio-ui typecheckfails, but not because of this PR. See below.
  • uv run pre-commit run -a not run in full; the commit-scoped pre-commit hooks ran and passed on commit.

⚠️ main currently fails typecheck

src/components/NewCustomizationForm/ModelSelectionSection.tsx(34,15): error TS2322:
Type 'true' is not assignable to type 'string | FilterOperators<string> | undefined'.

This reproduces on origin/main (9a2eaa8) with no changes applied — verified by checking out main directly and running typecheck. It comes from 0541fd718 (#1892), which passes filter: { fileset: true } to useModelSearch. This PR does not touch ModelSelectionSection.tsx; the file is byte-identical to main, and none of the 17 files this PR changes define useModelSearch, FilterOperators, or ModelEntityFilterInput.

Because the repo's pre-push hook runs typecheck, this branch was pushed with --no-verify. Lint and the full test suite were run manually instead. main needs fixing independently — every PR targeting it will show the same failure.

…ility

The Models page described one predicate with two words. The filter was
labelled "Customizable" while its only option was labelled "Fine-tunable" —
same widget, both vocabularies — and its tooltip explained it a third way.
The card beside it rendered a "Fine-tunable" badge behind a prop named
`showCustomizationBadges`.

Settles on "fine-tunable" for the user-facing model capability. That is
already what the badge, the empty-state picker ("No fine-tunable models
found"), the form, and the tooltip say; "Customization" stays where it names
the customizer service, its jobs, and their parameters, so the UI and the API
diverge deliberately rather than by accident.

Collapses the predicate to one definition. `Boolean(model.fileset)` was
re-implemented inline in WorkspaceBaseModelsRoute and BaseModelCard, neither
importing the `canFineTuneModel` that already existed; both now call it. The
`canCustomize` field on `useModelCustomizationEligibility` was a pure alias of
`canFineTune` with zero production consumers — a synonym that existed only to
let callers pick a vocabulary — and is removed with its test.

Also normalises the label spellings: "Finetuning Type" (CustomModelsDataView,
GrpoParametersSection, CustomizationConfigSidePanel) and "fine-tuneable"
(BaseModelCard stories) join the majority "Fine-tuning Type" /
"Fine-tunable". GrpoParametersSection and TrainingMethodSection are siblings
in one form and had disagreed. The custom-models empty state mixed both words
in a single sentence and is rewritten.

The serialized filter id stays `'customizable'`. It is written into the
`filters` search param, so renaming it would break links users have already
bookmarked or shared; the constant is renamed and commented instead, and the
existing URL round-trip tests still pin the wire value.

Signed-off-by: Alex Ray <alray@nvidia.com>
@aray12
aray12 force-pushed the models-naming/alray branch from 5e8fdd0 to 2e52cab Compare September 9, 2026 19:18
@aray12
aray12 removed this pull request from stack #1883 September 9, 2026 19:18
@aray12
aray12 changed the base branch from deployments-tab-order/alray to main September 9, 2026 19:18
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 40160/51175 78.5% 62.6%
Integration Tests 24559/48492 50.6% 23.0%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant